// 引入 Request
import Request from '@/common/js/request/myp-request/index.js';
import Cache from '@/common/js/cache.js';
import Base from '@/common/js/base.js';
import {
	loginFail
} from '@/common/js/util.js'

// 设置 通用的 baseUrl 以及 header
const config = {
	baseUrl: Base.baseApiUrl,
	header: {
		// "content-type": "application/x-www-form-urlencoded",
		"content-type": "application/json",
	}
}
// const noNeedToken = [Base.baseApiUrl + 'login']; //不需要token的请求
const noNeedLogin = Base.noNeedLogin.map((item, index) => {
	return Base.baseApiUrl + item;
});
// 设置自己的请求拦截器，必须加上 `async`
// 请求前的拦截，比如是否登录/过期/刷新token/...
const reqInterceptor = async (options) => {
	console.log('请求头', [options,noNeedLogin,options.url,noNeedLogin.indexOf(options.url)]);
	if (noNeedLogin.indexOf(options.url) === -1) {
		if (Cache.get('token') === false) {
			return {
				mypReqToCancel: true,
				msg: '登陆状态失效'
			}
		} else {
			options.header.token = Cache.get('token') || ''
		}
	}
	// 必须返回一个 Object
	// 拦截请求：return {mypReqToCancel: true, ...}
	// TODO: 添加任意拦截逻辑
	return options
}

// 设置自己的响应拦截器
// 统一对返回的数据进行整理，方便接口统一使用
// conf是您api的options信息，一般情况下您只需要用到您自定义的标记字段
const resInterceptor = (response, conf = {}) => {
	// 必须返回你需要处理的数据，将会进入resolve（then中处理）
	// 如果需要reject，需要设置mypReqToReject:true，还可以携带自己定义的任何提示内容（catch中处理）
	// uni.request进入fail也会进入该拦截器（为了统一处理逻辑），这个时候的response参数为{mypFail: true, response: fail info}。fail时不管返回啥，都进入reject(catch)
	if (response.statusCode == 401) {
		Cache.remove('token')
		loginFail();
	}
	if (response.mypFail) {
		console.log('response.mypFail');
		return response.response
	}
	// 请求被拦截时也会进入该回掉（为了统一处理逻辑），这个时候的response参数为{mypCancel: true, response: cancel info}。cancel时不管返回啥，都进入reject(catch)
	if (response.mypCancel) {
		console.log('response.mypCancel', response.response);
		Cache.remove('token')
		loginFail(response.response.msg || '');
		return response.response
	}
	return response
}

// 实例化请求器
// 您可以根据需要实例化多个请求器
const request = new Request(config, reqInterceptor, resInterceptor)

export default request
